home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #2 / Amiga Plus CD - 2004 - No. 02.iso / AmigaPlus / Tools / Development / AmigaTalk / user / Curses.st < prev    next >
Text File  |  2004-01-31  |  12KB  |  397 lines

  1. " ------------------------------------------------------------- "
  2. " Curses.st - Implementation of Curses library functions for    "
  3. "              AmigaTalk.                                       "
  4. " ------------------------------------------------------------- "
  5.  
  6. Class Curses :Object ! windowCount !
  7. [
  8.   new
  9.     windowCount <- 0.
  10.     ^ self
  11. |
  12.   initialize
  13.     <primitive 124 1>. " initscr() "
  14.     ^ self
  15. |
  16.   closeDown
  17.     ^ <primitive 124 0> " endwin() "
  18. |
  19.   initializeWithColors: depth
  20.     <primitive 124 7 depth>.    " StartColor( depth) "
  21.     <primitive 124 1>.          " initscr()          "
  22.     ^ self
  23. |
  24.   initWithStdColors
  25.     <primitive 124 7>.    " start_colors() "
  26.     <primitive 124 1>.    " initscr()      "
  27.     ^ self
  28. |
  29.   openWindow: xStart yStart: y width: w height: h ! temp !
  30.     (windowCount < 50)
  31.       ifTrue: [ temp <- <primitive 124 2 h w y xStart>. " newwin() "
  32.                 windowCount <- windowCount + 1.
  33.                 ^ temp
  34.               ]
  35. |
  36.   openSubWindow: parent xStart: x yStart: y width: w height: h ! temp ! 
  37.     (windowCount < 50)
  38.       ifTrue: [ temp <- <primitive 124 4 parent h w y x>. " subwin() "
  39.                 windowCount <- windowCount + 1.
  40.                 ^ temp
  41.               ]
  42. |
  43.   refreshScreen
  44.     ^ <primitive 124 9>            " refresh()  "
  45. |
  46.   refreshWindow: winNumber
  47.     ^ <primitive 124 10 winNumber> " wrefresh() "
  48. |
  49.   closeWindow: winNumber ! temp !
  50.     temp        <- <primitive 124 3 winNumber>. " delwin() "
  51.     windowCount <- windowCount - 1.
  52.     self refreshScreen.
  53.     ^ temp
  54. |
  55.   drawBorder: winNumber hChar: hc vChar: vc
  56.     <primitive 124 5 winNumber vc hc>. " box() "
  57.     ^ self refreshWindow: winNumber
  58. |
  59.   moveWindow: winNumber x: x y: y
  60.     <primitive 124 74 winNumber y x>.  " mvwin() "
  61.     ^ self refreshWindow: winNumber
  62. |
  63.   beep
  64.     ^ <primitive 124 83>
  65. |
  66.   flash
  67.     ^ <primitive 124 84>
  68. |
  69.   cBreak: status
  70.     (status == true )
  71.       ifTrue:  [ ^ <primitive 124 65> ] " cbreak()   "
  72.       ifFalse: [ ^ <primitive 124 66> ] " nocbreak() "
  73. |
  74.   enableClear: winNumber status: status
  75.     (status == true)
  76.       ifTrue:  [ ^ <primitive 124 71 winNumber 1> ] " clearok( TRUE  ) "
  77.       ifFalse: [ ^ <primitive 124 71 winNumber 0> ] " clearok( FALSE ) "
  78. |
  79.   enableCursor: winNumber status: status
  80.     (status == true)
  81.       ifTrue:  [ ^ <primitive 124 72 winNumber 1> ] " leaveok( TRUE  ) "
  82.       ifFalse: [ ^ <primitive 124 72 winNumber 0> ] " leaveok( FALSE ) "
  83. |
  84.   newlineMap: status
  85.     (status == true )
  86.       ifTrue:  [ ^ <primitive 124 67> ] " nl()   "
  87.       ifFalse: [ ^ <primitive 124 68> ] " nonl() " 
  88. |
  89.   echo: status
  90.     (status == true )
  91.       ifTrue:  [ ^ <primitive 124 69> ] " echo()   "
  92.       ifFalse: [ ^ <primitive 124 70> ] " noecho() "
  93. |
  94.   enableDelay: winNumber status: status  
  95.     (status == true)
  96.       ifTrue:  [ ^ <primitive 124 73 winNumber 0> ] " nodelay( FALSE ) "
  97.       ifFalse: [ ^ <primitive 124 73 winNumber 1> ] " nodelay( TRUE  ) "
  98. |
  99.   hasColors
  100.     ^ <primitive 124 6> " has_colors() "
  101. |
  102.   setColor: number red: r green: g blue: b
  103.     <primitive 124 8 number r g b>.
  104.     ^ self refreshScreen
  105. |
  106.   setTextPenColor: colornum
  107.     ^ <primitive 124 85 colornum>
  108. |
  109.   setBackPenColor: colornum
  110.     ^ <primitive 124 86 colornum>
  111. |
  112.   setDrawMode: mode
  113.     ^ <primitive 124 87 mode>
  114. |
  115.   enableScroll: winNumber status: status
  116.     (status == true)
  117.       ifTrue:  [ ^ <primitive 124 76 winNumber 1> ] " scrollok( TRUE  ) "
  118.       ifFalse: [ ^ <primitive 124 76 winNumber 0> ] " scrollok( FALSE ) "
  119. |
  120.   enableKeyPad: winNumber status: status
  121.   " This will allow the following key values to be received:
  122.  
  123.     KEY_BACKSPACE   0010          /* backspace character */
  124.     KEY_DC          0177          /* Delete character    */
  125.     KEY_DOWN        0400          /* The down arrow key  */
  126.     KEY_UP          0401          /* The up arrow key    */
  127.     KEY_LEFT        0402          /* The left arrow key  */
  128.     KEY_RIGHT       0403          /* The right arrow key */
  129.     KEY_HELP        0404          /* Help Key            */
  130.     KEY_F0          0405          /* Function keys       */
  131.     KEY_F(n)        (KEY_F0+(n))
  132.   "
  133.     (status == true)
  134.       ifTrue:  [ ^ <primitive 124 75 winNumber 1> ] " keypad( TRUE  ) "
  135.       ifFalse: [ ^ <primitive 124 75 winNumber 0> ] " keypad( FALSE ) "
  136. |
  137.   scrollWindow: winNumber
  138.     <primitive 124 77 winNumber>.    " scroll() "
  139.     ^ self refreshWindow: winNumber
  140. |
  141.   setScrollRegion: top Bottom: bott
  142.     <primitive 124 78 top bott>.     " setscrreg() "
  143.     ^ self refreshScreen
  144. |
  145.   setWindowScrollRegion: winNumber top: top Bottom: bott
  146.     <primitive 124 79 winNumber top bott>. " wsetscrreg() "
  147.     ^ self refreshWindow: winNumber
  148. |
  149.   windowNeedsRefresh: winNumber
  150.     ^ <primitive 124 80 winNumber>
  151. |
  152.   printChar: c
  153.     <primitive 124 37 c>.            " addch() "
  154.     ^ self refreshScreen
  155. |
  156.   printWindowChar: winNumber char: c 
  157.     <primitive 124 38 winNumber c>.  " waddch() "   
  158.     ^ self refreshWindow: winNumber
  159. |
  160.   printChar: c at: thePoint
  161.     <primitive 124 39 (thePoint y) (thePoint x) c>. " mvaddch() "
  162.     ^ self refreshScreen
  163. |
  164.   printWindowChar: winNumber char: c at: thePoint
  165.     <primitive 124 40 winNumber (thePoint y) (thePoint x) c>. " mvwaddch()"
  166.     ^ self refreshWindow: winNumber
  167. |
  168.   printString: string
  169.     <primitive 124 41 string>.
  170.     ^ self refreshScreen
  171. |
  172.   printWindowString: winNumber string: string
  173.     <primitive 124 42 winNumber string>.
  174.     ^ self refreshWindow: winNumber
  175. |
  176.   printString: string at: thePoint
  177.     <primitive 124 43 (thePoint y) (thePoint x) string>.
  178.     ^ self refreshScreen
  179. |
  180.   printWindowString: winNumber string: string at: thePoint
  181.     <primitive 124 44 winNumber (thePoint y) (thePoint x) string>.
  182.     ^ self refreshWindow: winNumber
  183. |
  184.   setAttributes: attrs
  185.                  " attrs is one or more of the following:
  186.                          NORMAL    = 0
  187.                          INVERSE   = 16
  188.                          UNDERLINE = 32
  189.                          BOLD      = 64
  190.                  "
  191.     <primitive 124 53 attrs>.
  192.     ^ self refreshScreen
  193. |
  194.   setWindowAttributes: winNumber attr: attrs
  195.                  " attrs is one or more of the following:
  196.                          NORMAL    = 0
  197.                          INVERSE   = 16
  198.                          UNDERLINE = 32
  199.                          BOLD      = 64
  200.                  "
  201.     <primitive 124 54 winNumber attrs>.
  202.     ^ self refreshWindow: winNumber
  203. |
  204.   addAttributes: attrs
  205.                  " attrs is one or more of the following:
  206.                          NORMAL    = 0
  207.                          INVERSE   = 16
  208.                          UNDERLINE = 32
  209.                          BOLD      = 64
  210.                  "
  211.     <primitive 124 55 attrs>.
  212.     ^ self refreshScreen
  213. |
  214.   addWindowAttributes: winNumber attr: attrs
  215.                  " attrs is one or more of the following:
  216.                          NORMAL    = 0
  217.                          INVERSE   = 16
  218.                          UNDERLINE = 32
  219.                          BOLD      = 64
  220.                  "
  221.     <primitive 124 56 winNumber attrs>.
  222.     ^ self refreshWindow: winNumber
  223. |
  224.   removeAttributes: attrs
  225.                  " attrs is one or more of the following:
  226.                          NORMAL    = 0
  227.                          INVERSE   = 16
  228.                          UNDERLINE = 32
  229.                          BOLD      = 64
  230.                  "
  231.     <primitive 124 57 attrs>.
  232.     ^ self refreshScreen
  233. |
  234.   removeWindowAttributes: winNumber attr: attrs
  235.                  " attrs is one or more of the following:
  236.                          NORMAL    = 0
  237.                          INVERSE   = 16
  238.                          UNDERLINE = 32
  239.                          BOLD      = 64
  240.                  "
  241.     <primitive 124 58 winNumber attrs>.
  242.     ^ self refreshWindow: winNumber
  243. |
  244.   invertColors
  245.     <primitive 124 59>.           "  standout() "
  246.     ^ self refreshScreen
  247. |
  248.   invertWindowColors: winNumber
  249.     <primitive 124 60 winNumber>. " wstandout() "
  250.     ^ self refreshWindow: winNumber
  251. |
  252.   revertColors
  253.     <primitive 124 61>.           " standend()  "
  254.     ^ self refreshScreen
  255. |
  256.   revertWindowColors: winNumber
  257.     <primitive 124 62 winNumber>. " wstandend() "
  258.     ^ self refreshWindow: winNumber
  259. |
  260.   emptyScreen
  261.     <primitive 124 45>.             " erase()   "
  262.     ^ self refreshScreen
  263. |
  264.   emptyWindow: winNumber
  265.     <primitive 124 46 winNumber>.   " werase()   "
  266.     ^ self refreshWindow: winNumber
  267. |
  268.   clearScreen
  269.     <primitive 124 47>.            " clear()    "
  270.     ^ self refreshScreen
  271. |
  272.   clearWindow: winNumber
  273.     <primitive 124 48 winNumber>.   " wclear()   "
  274.     ^ self refreshWindow: winNumber
  275. |
  276.   clearScreenToBottom
  277.     <primitive 124 49>.             " clrtobot() "
  278.     ^ self refreshScreen
  279. |
  280.   clearWindowToBottom: winNumber
  281.     <primitive 124 50 winNumber>.   " wclrtobot() "
  282.     ^ self refreshWindow: winNumber
  283. |
  284.   clearScreenToEOL
  285.     <primitive 124 51>.             " clrtoeol() "
  286.     ^ self refreshScreen
  287. |
  288.   clearWindowToEOL: winNumber
  289.     <primitive 124 52 winNumber>.   " wclrtoeol() "
  290.     ^ self refreshWindow: winNumber
  291. |
  292.   deleteChar
  293.     <primitive 124 31>. " delch() "
  294.     ^ self refreshScreen
  295. |
  296.   deleteWindowChar: winNumber
  297.     <primitive 124 32 winNumber>. " wdelch() "
  298.     ^ self refreshWindow: winNumber
  299. |
  300.   deleteCharAt: aPoint
  301.     <primitive 124 33 (aPoint y) (aPoint x)>. " mvdelch() "
  302.     ^ self refreshScreen
  303. |
  304.   deleteWindowChar: winNumber at: aPoint
  305.     <primitive 124 34 winNumber (aPoint y) (aPoint x)>. " mvwdelch() "
  306.     ^ self refreshWindow: winNumber
  307. |
  308.   getChar
  309.     ^ <primitive 124 13>                                 " getch()    "
  310. |
  311.   getWindowChar: winNumber
  312.     ^ <primitive 124 14 winNumber>                       " wgetch()   "
  313. |
  314.   getCharAt: aPoint
  315.     ^ <primitive 124 15 (aPoint y) (aPoint x)>           " mvgetch()  "
  316. |
  317.   getWindowChar: winNumber at: aPoint
  318.     ^ <primitive 124 16 winNumber (aPoint y) (aPoint x)> " mvwgetch() "
  319. |
  320.   getString: buffer
  321.     ^ <primitive 124 17 buffer>                          " getstr()   "
  322. |
  323.   getWindowString: winNumber buffer: string
  324.     ^ <primitive 124 18 winNumber string>                " wgetstr()  "
  325. |
  326.   getStringAt: aPoint buffer: string
  327.     ^ <primitive 124 19 (aPoint y) (aPoint x) string>    " mvgetstr() "
  328. |
  329.   getWindowString: winNumber at: aPoint buffer: string   " mvwgetstr() "
  330.     ^ <primitive 124 16 winNumber (aPoint y) (aPoint x) string>
  331. |
  332.   readChar
  333.     ^ <primitive 124 21>                                 " inch()    "
  334. |
  335.   readWindowChar: winNumber
  336.     ^ <primitive 124 22 winNumber>                       " winch()   "
  337. |
  338.   readCharAt: aPoint
  339.     ^ <primitive 124 23 (aPoint y) (aPoint x)>           " mvinch()  "
  340. |
  341.   readWindowChar: winNumber at: aPoint
  342.     ^ <primitive 124 24 winNumber (aPoint y) (aPoint x)> " mvwinch() "
  343. |
  344.   insertChar
  345.     <primitive 124 25>.                                 " insch()    "
  346.     ^ self refreshScreen
  347. |
  348.   insertWindowChar: winNumber
  349.     <primitive 124 26 winNumber>.                       " winsch()   "
  350.     ^ self refreshWindow: winNumber
  351. |
  352.   insertCharAt: aPoint
  353.     <primitive 124 27 (aPoint y) (aPoint x)>.           " mvinsch()  "
  354.     ^ self refreshScreen
  355. |
  356.   insertWindowChar: winNumber at: aPoint
  357.     <primitive 124 28 winNumber (aPoint y) (aPoint x)>. " mvwinsch() "
  358.     ^ self refreshWindow: winNumber
  359. |
  360.   insertLine
  361.     <primitive 124 29>.                                 " insertln() "
  362.     ^ self refreshScreen
  363. |
  364.   insertWindowLine: winNumber
  365.     <primitive 124 30 winNumber>.                       " winsertln()"
  366.     ^ self refreshWindow: winNumber
  367. |
  368.   deleteLine
  369.     <primitive 124 35>.                                 " deleteln() "
  370.     ^ self refreshScreen
  371. |
  372.   deleteWindowLine: winNumber
  373.     <primitive 124 36 winNumber>.                       " wdeleteln()"
  374.     ^ self refreshWindow: winNumber
  375. |
  376.   moveCursorTo: aPoint
  377.     <primitive 124 63 (aPoint y) (aPoint x)>. " move() "
  378.     ^ self refreshScreen
  379. |
  380.   moveWindowCursor: winNumber to: aPoint
  381.     <primitive 124 63 winNumber (aPoint y) (aPoint x)>. " wmove() "
  382.     ^ self refreshWindow: winNumber
  383. |
  384.   addToRefreshList: winNumber
  385.     ^ <primitive 124 12 winNumber> " wnoutrefresh() "
  386. |
  387.   updateWindows
  388.     ^ <primitive 124 11>           " doupdate() "
  389. |
  390.   flushKeys
  391.     ^ <primitive 124 81> " flushinp() "
  392. |
  393.   moveCursorFrom: aPoint to: newPoint " mvcur() "
  394.     <primitive 124 82 (aPoint y) (aPoint x) (newPoint y) (newPoint x)>.
  395.     ^ self refreshScreen
  396. ]
  397.